package edu.upc.cineplanet.repositoryjdbc;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.stereotype.Repository;

import edu.upc.cineplanet.Domain.Producto;
import edu.upc.cineplanet.Domain.UsuarioAdmin;
import edu.upc.cineplanet.Domain.UsuarioWeb;
import edu.upc.cineplanet.repository.ProductoRepository;

@Repository
public class ProductoRepositoryJdbc extends JdbcDaoSupport implements ProductoRepository {
	
	@Autowired
	public ProductoRepositoryJdbc(DataSource dataSource){
		setDataSource(dataSource);
	}
	
	public List<Producto> obtenerTodosProductos() {
		List<Producto> productos;
		String sql = "select * from producto";
		productos = getJdbcTemplate().query(sql, new ProductoRowMapper());
		
		return productos;
	}
	
	private class ProductoRowMapper implements ParameterizedRowMapper<Producto>{
		public Producto mapRow(ResultSet rs, int rowNum) throws SQLException{
			Producto p = new Producto();
			p.setCodigoProducto(rs.getString("co_producto"));
			p.setNombreProducto(rs.getString("no_producto"));
			p.setMoneda(rs.getString("co_moneda"));
			p.setPrecio(rs.getDouble("precio_unitario"));
			p.setStock(rs.getDouble("stock"));
			p.setArchivoImagen(rs.getString("archivo_imagen"));
			return p;
		}
	}
	
	public void crearProducto(Producto prod) {
		prod.setCodigoProducto(creaCodigo());
		String sql_usuario_admin = "insert into PRODUCTO (co_producto,no_producto , co_moneda , stock  , archivo_imagen  ) " +  
			         		 "values (?,?,?,?,?)";
				
		getJdbcTemplate().update(sql_usuario_admin,new Object[]{ prod.getCodigoProducto() ,prod.getNombreProducto() ,prod.getMoneda(),  
				prod.getStock(), prod.getArchivoImagen() });					
		
	}	
	
	public String creaCodigo() {
		String codigo;
		String nuevo_codigo;
		String sql = "SELECT (MAX(U.co_Producto)+1) FROM PRODUCTO U";
		codigo = getJdbcTemplate().queryForObject(sql, String.class);
		
		nuevo_codigo = codigo;
		int tam = 0,diff = 0;
		if(codigo.length() < 10){
			tam = codigo.length();	
			diff = 10-tam;
			while(diff>0){
				nuevo_codigo = "0"+nuevo_codigo ;
				diff--;
			}						
		}
		return nuevo_codigo;
	}	
	
}
